Low latency and power efficient data transmission between a sensor and server computer

ABSTRACT

In an example method, sensor data is received at a computer system from a sensor. The sensor data is processed by the computer system. The processed sensor data is larger in size than the sensor data. The processed sensor data is transmitted from the computer system to a first output device. The sensor data is received at the computer system from the sensor over a first communications link. The processed sensor data is transmitted from the computer system to the first output device over a second communications link. The first communications link has a lower throughput than the second communications link.

CROSS REFERENCE TO RELATED APPLICATIONS

This application is a bypass continuation-in-part of PCT Application No. PCT/US2016/019946, filed Feb. 26, 2016, which claims priority to U.S. Application No. 62/121,478, filed Feb. 26, 2015. The contents of the earlier applications are incorporated by reference in their entirety herein.

TECHNICAL FIELD

The disclosure generally relates to transmitting data between sensors and server computers.

BACKGROUND

Sensors can be used to detect events occurring in an environment and/or measure properties of an environment, and provide a corresponding output. As an example, sensors can be used to detect the temperature of an environment, the motion of objects within an environment, changes in lighting conditions of an environment, among other events or properties. Information regarding the detected events or properties can be provided to another device (e.g., a computing device) for analysis.

In some cases, the output from a sensor can be used to control and regulate the operation of other devices. As an example, sensor information describing the temperature of an environment can be used to regulate an air conditioning unit operating in the environment. As another example, sensor information describing changes in lighting conditions of an environment can be used to control lights illuminating the environment.

In some cases, sensors can transmit information to a “cloud” computing system (e.g., a collection of one or more remote server computers), such that the information is processed remotely.

SUMMARY

The present disclosure describes implementations for transmitting, processing, and managing data between one or more sensors and one or more server computers (e.g., a “cloud” computing system). For example, in some implementations, a sensor can transmit a relatively small amount of data to one or more server computers, and the server computers can process the received sensor data such that it is suitable for use in one or more applications or use cases. In some cases, sensor data can be processed partially or entirely by the server computers rather than by the sensor itself.

In general, in an aspect, a method includes receiving sensor data at a computer system from a sensor. The method also includes processing, by the computer system, the sensor data. The processed sensor data is larger in size than the sensor data. The method also includes transmitting, from the computer system to a first output device, the processed sensor data. The sensor data is received at the computer system from the sensor over a first communications link. The processed sensor data is transmitted from the computer system to the first output device over a second communications link. The first communications link has a lower throughput than the second communications link.

Implementations of this aspect may include one or more of the following features.

In some implementations, the first communications link can be a Bluetooth connection, and the second communications link can include one or more of: an Ethernet connection, a Wi-Fi connection, or a Wide Area Network connection. The method can further include maintaining the first communications link and the second communications link over a period of time.

In some implementations, the sensor data can include a numerical value corresponding to a measurement obtained by the sensor. Processing the sensor data can include appending a unit of measurement to the numerical value.

In some implementations, the sensor data can include a numerical value corresponding to a measurement obtained by the sensor. The numerical value can correspond to a first unit of measurement. Processing the sensor data can include converting the numerical value into a second numerical value associated with a second unit of measurement.

In some implementations, the sensor data can include a numerical value corresponding to a measurement obtained by the sensor. Processing the sensor data can include performing one or more mathematical operations with respect to the numerical value.

In some implementations, the sensor data can be received at the computer system via an intermediate relay device. The intermediate relay device can include a mobile device communicatively coupled to the sensor and the computer system.

In some implementations, the method can further include receiving, at the computer system from the sensor, an identifier associated with the sensor. The computer system can receive the identifier prior to receiving the sensor data. The sensor data can be processed in a manner based at least in part on the received identifier. Processing the sensor data can include performing one or more operations with respect to the numerical value. The one or more operations can be selected based on the received identifier. The first output device can be selected based on the received identifier.

In some implementations, the method can further include defining, by the computer system, a logical configuration area, the logical configuration area specifying a relationship between at least the sensor, the processing of the sensor data, and the first output device. The method can further include modifying the logical configuration area based on user input. The method can further include defining, by the computer system, a second logical configuration area, the second logical configuration area specifying a relationship between at least one or more additional sensors, a processing of additional sensor data received by the computer system from the one or more additional sensors, and one or more additional output devices.

In some implementations, the computer system can include one or more first server computers and one or more second server computers. The local configuration area can be defined by the one or more first server computers. The sensor data can be received from the sensor at the one or more first server computers. Processing the sensor data can include transmitting the sensor data from the one or more first server computers to the one or more second computers. Processing the sensor data can also include processing, by the one or more second server computers, the sensor data. Processing the sensor data can also include transmitting, from the one or more second server computers to the one or more first server computers, the processed sensor data. The logical configuration area can further specify a relationship between at least the sensor, the processing of the sensor data, the one or more second server computers, and the first output device.

In some implementations, the method can further include transmitting, from the computer system to a second output device, the processed sensor data.

In some implementations, the output device can be configured to control an electrical or mechanical device based on the processed sensor data.

In some implementations, the sensor data can be received at a computer system from the sensor via a push communication.

In general, in another aspect, a method includes receiving, at a computer system from a sensor, sensor data. The method also includes transmitting, from the computer system to a first output device, the sensor data. The method also includes transmitting, from the computer system to a second output device, the sensor data. The sensor data is transmitted from the computer system to the first output device over a second communications link. The sensor data is transmitted from the computer system to the second output device over a third communications link. The first communications link has a lower throughput than the second communications link and the third communications link.

Implementations of this aspect may include one or more of the following features.

In some implementations, the first communications link can be a Bluetooth connection, and each of the second communications link and the third communications link can include each one or more of: an Ethernet connection, a Wi-Fi connection, or a Wide Area Network connection.

In some implementations, the method can further include receiving, at the computer system from the sensor, an identifier associated with the sensor. The first output device and the two output device can be selected based on the received identifier.

In some implementations, the method can further include defining, by the computer system, a logical configuration area, the logical configuration area specifying a relationship between at least the sensor, the first output device, and the second output device. The method can further include modifying the logical configuration area based on user input.

In some implementations, the method can further include defining, by the computer system, a second logical configuration area, the second logical configuration area specifying a relationship between at least one or more additional sensors and one or more additional output devices.

In some implementations, at least one of the first output device and the second output device can be configured to control an electrical or mechanical device based on the processed sensor data.

Other implementations are directed to systems, devices and non-transitory, computer-readable mediums.

Implementations of subject matter described herein can provide various technical benefits. In some cases performing some or all of the sensor data processing on the server computers reduces the computational requirements of the sensor, and can enable sensors to be constructed more simply and/or less expensively. Further, in some cases, this also enables sensors to operate more efficiently. For example, sensors can consume less power during operation, as fewer functions are being performed by the sensor. Further, this also enables sensors to transmit data more quickly and efficiently to the server computers. For example, as each sensor transmits only a relatively small amount of data to a server computer, the amount of network traffic and the network latency between them in reduced. In addition, low latency data communications between a sensor and a server computer enables faster data sampling by the sensor. For example, as collected data can be transmitted more quickly after collection, the sensor can transmit collected data in real-time or substantially real time. Thus, other devices can make use of the collected data more quickly after collection.

Details of one or more implementations are set forth in the accompanying drawings and the description below. Other features, aspects, and potential advantages will be apparent from the description and drawings, and from the claims.

BRIEF DESCRIPTION OF THE FIGURES

FIG. 1 is a diagram of an example system for processing sensor data.

FIGS. 2A-C are diagrams of an example process for processing and routing sensor data.

FIGS. 3A and 3B are diagrams of another example process for processing and routing sensor data.

FIGS. 4A-C are diagrams of another example process for processing and routing sensor data.

FIG. 5 is a diagram of another example system for processing sensor data.

FIG. 6 is a diagram of an example system topology.

FIG. 7 is a diagram of another example system topology.

FIG. 8 is a diagram of another example system for processing sensor data.

FIG. 9 is a diagram of an example computer system.

DESCRIPTION

The present disclosure describes implementations for transmitting, processing, and managing data between one or more sensors and one or more server computers (e.g., a “cloud” computing system). For example, in some implementations, a sensor can transmit a relatively small amount of data to one or more server computers, and the server computers can process the received sensor data such that it is suitable for use in one or more applications or use cases. In some cases, sensor data can be processed partially or entirely by the server computers rather than by the sensor itself.

In some cases, performing some or all of the sensor data processing on the server computers reduces the computational requirements of the sensor, and can enable sensors to be constructed more simply and/or less expensively. For example, sensors can be constructed using less powerful processors and/or fewer processors. In some cases, this also enables sensors to operate more efficiently. For example, sensors can consume less power during operation, as fewer functions are being performed by the sensor. Further, this also enables sensors to transmit data more quickly and efficiently to the server computers. For example, as each sensor transmits only a relatively small amount of data to a server computer, the amount of network traffic and the network latency between them in reduced. This can be particularly useful, for example, if the sensors and the server computers communicate through a relatively low-power network connection having a relatively low throughput (e.g., a Bluetooth Lowe Energy, or BLE, connection).

Further, low latency data communications between a sensor and a server computer enables faster data sampling by the sensor. For example, as collected data can be transmitted more quickly after collection, the sensor can transmit collected data in real-time or substantially real time. Thus, other devices can make use of the collected data more quickly after collection. Further, as data is transmitted from the sensor more quickly after collection, the sensor is less likely to require an extensive transmission queue or buffer to stage data prior to transfer. In some cases, a sensor need not have a transmission queue or buffer at all.

Low latency and power efficient data transmissions between a sensor and a server computer can be beneficial in a variety of different applications. As an example, medical equipment can relay real-time or substantially real-time sensor data to one or more server computers. In turn, the server computers can process the sensor data (e.g., using processor-intensive analytic algorithms), and transmit commands to the medical equipment based on the processed sensor data (e.g., commands to calibrate the medical equipment in real-time or substantially real-time based on the processed sensor data).

As another example, a crane or other construction equipment can include sensors that transmit real-time or substantially real-time information regarding the equipment's load conditions to one or more server computers. In turn, the server computers can process the sensor data, and transmit commands to the equipment based on the processed sensor data (e.g., commands to control the operation of the crane in real-time or substantially real-time, such that the crane compensates for the loads and remains balanced during operation). Further, information regarding the equipment's load can be recorded and used to improve the design of cranes in the future.

As another example, a flying object (e.g., a plane, a helicopter, or an aerial drone) can include a global position system (GPS) sensor that measures the location of the flying object in real-time or substantially real-time. This location information can be transmitted from the sensor to one or more server computers. In turn, the server computers can control the operation of ground-based spotlights in real-time or substantially real-time based on the location information, such that the spotlights illuminate the flying object during flight.

In some implementations, a user can customize how the sensor information is processed by the server computers. This can be beneficial, for example, as it enables a user to tailor the processed data to suit a particular application. For example, the user can customize the processing of sensor data such that the processed sensor data is compatible with a particular output device and/or formatted or structured in a way suitable for storage or subsequent analysis.

FIG. 1 shows an example system 100 for processing sensor data. The system 100 includes several sensors 110 a-c, a server computing system 120, and several output devices 130 a-c. The sensors 110 a-c are communicatively coupled to the server computing system 120 through a communications network 140 a. The server computing system 120 is communicatively coupled to the output devices 130 a-c through a communications network 140 b.

The sensors 110 a-c can include any device used to detect events occurring in an environment and/or measure properties of an environment, and provide a corresponding output (e.g., an indication of the measured events and/or properties). As examples, the sensors 110 a-c can include vibration sensors, temperature sensors, speed sensors, rotation sensors (e.g., sensors configured to detect the rotation of a moving wheel or shaft), airflow sensors, pressure sensors, chemical measurement sensors, electrical sensors (e.g., sensors configured to detect electrical current or electrical potential), magnetic sensors, flow sensors, fluid velocity sensors, radiation sensors, navigation sensors, position or location sensors, angle sensors, displacement sensors, distance sensors, acceleration sensors, optical sensors, pressure sensors, force sensors, density sensors, proximity sensors, presence sensors, etc.) In some cases, the sensors 110 a-c can be included as a part of other devices (e.g., mounted, secured, or otherwise incorporated into other devices). In some cases, the sensors 110 a-c can be stand-alone devices. Although three sensors are shown, this is merely an illustrative example. In practice, there may be any number of sensors (e.g., one, two, three, four, or more).

The server computing system 120 can include any electronic device that is used process, transmit and receive data. For example, the server computing system 120 can receive sensor data from the sensors 110 a-c, process the received sensor data, and transmit the processed sensor data to the output devices 130 a-c. Examples of a server computing system 120 include devices such as desktop computers, notebook computers, server computers, and other computing devices capable of transmitting and receiving data (e.g., to and from the sensors 110 a-c and the output devices 130 a-c through the networks 140 a and 140 b). A server computing system 120 can include devices that operate using one or more operating system (for example, Microsoft Windows, Apple OSX, Linux, Unix, Android, iOS, etc.) and/or architectures (for example, x86, PowerPC, ARM, etc.)

The server computing system 120 is illustrated as a single component, but in practice can be implemented on one or more computing devices. The server computing system 120 can be, for instance, a single computing device that is connected to networks 140 a and 140 b. In some implementations, the server computing system 120 can include multiple computing devices that are connected to networks 140 a and 140 b. For instance, the server computing system 120 can include several computing devices, and the functionality of the server computing system 120 can be distributive on one or more of these computing devices (e.g., a “cloud” environment). In some implementations, one or more of the computing devices of the server system 120 need not be located locally with respect to the rest of system 100, and portions of one or more the computing devices can be located in one or more remote physical locations (e.g., in different rooms, buildings, cities, regions, countries, etc.).

The output devices can be, or include, any device that makes use of processed data from the server computing system 120. In some cases, the output devices can control the operation of one or more electrical and/or mechanical components, at least in part, based on information received from the server computing system 120. For instance, the output device can include a control module communicatively coupled to one or more processors, actuators, engines, motors, valves, or other such components, and the control module can control those components based on processed sensor data received from the server computing system 120.

As an example, the sensors 110 a-c can be configured to measure the ambient temperature of a particular room, and the output devices 130 a-c can be configured to control the operation of air conditioning units positioned regulating the temperature within the room. During operation, the sensors 110 a-c transmit sensor data indicating the measured temperature to the server computing system 120. The server computing system 120 processes the received sensor data, such that it is in a form usable by the output devices 130 a-c, then transmits the processed sensor data to the output devices 130 a-c. Based on this data, the output devices 130 a-c adjusts the operation of the air conditioning units (e.g., by starting or stopping the operation of the air conditioning units to achieve a particular target ambient temperature in the room).

In some cases, the output devices 130 a-c can include one more devices that store and/or further process the data received from the server computing system 120. For example, the output devices 130 a-c can include one or more computing systems (e.g., having one or more processors and/or data storage modules) to retain the received data and conduct further analysis on the received data.

Although three output devices are shown, this is merely an illustrative example. In practice, there may be any number of output devices (e.g., one, two, three, four, or more).

Networks 140 a and 140 b can be any communications networks through which data can be transferred and shared. For example, network 140 a and 140 b can be local area networks (LANs) or a wide-area networks (WANs), such as the Internet. Networks 140 a and 140 b can be implemented using various networking interfaces, for instance wireless networking interfaces (such as Wi-Fi, Bluetooth, or infrared) or wired networking interfaces (such as Ethernet or serial connection). Networks 140 a and 140 b also can include combinations of more than one network, and can be implemented using one or more networking interfaces. In some cases, networks 140 a and 140 b can include a combination of more than one network, each extending across a different physical location. In some cases, a communications link across the network 140 a and a communications link across the network 140 b can be maintained over a period of time, such that information from the sensors 110 a-c can be transmitted in real-time or substantially real-time to the server computing system 120 a and the one or more output devices 130 a-c.

In the example shown in FIG. 1, the throughput of network 140 a is less than the throughput of network 140 b (represented by the thinner arrows interconnecting the network 140 a to the sensors 110 a-c and the server computing system 120, and by the thicker arrows interconnecting the network 140 b to the server computing system 120 and the output devices 130 a-c. As an example, the network 140 a can operate according to a relatively low power communications protocol (e.g., a BLE network), and the network 140 b can operate according to a relatively high power communications protocol (e.g., an Ethernet network, such as Gigabit Ethernet network, a Wi-Fi network, etc.). In some cases, the network 140 b can be a LAN or a WAN, such as the Internet. In some cases, the throughput of network 140 a can be 100 kbit/s or less (e.g., less than 80 kbit/s, less than 50 kbit/s, less than 35 kbit/s, less than 20 kbit/s, and so forth). In some cases, the throughput of a communications link across the network 140 b can be 1 Mbit/s or more (e.g., more than 2 Mbit/s, more than 10 Mbit/s, more than 100 Mbit/s, more than 1000 Mbit/s, and so forth).

Due to the relatively low throughput of the network 140 a, communications between the sensors 110 a-c and the server computing system 120 may experience relatively high network latency, particularly when a large amount of data is being transmitted between them. To reduce the network latency, the sensors 110 a-c can be configured to transmit a relatively small amount of information at a time (e.g., one byte, two bytes, three bytes, or some other small amount of information that can be transmitted at a relatively low latency across the network 140 a). In some cases, the sensors 110 a-c can transmit values describing measurements (e.g., a numerical value), while excluding contextual information (e.g., an indication of the units of measurement).

Due to the exclusion of contextual information, the information transmitted by the sensors 110 a-c may not be directly compatible with the output devices 130 a-c. For example, referring to FIG. 2A, a sensor 110 a can measure the ambient temperature of the environment (e.g., 295 K), but transmit only a numerical value describing the temperature (e.g., “295”) while excluding an indication of the units of measurement (e.g., “K”). This reduces the amount of data that is transmitted between the sensor 110 a and the server computing system 120, and improves the network latency between them. For example, in some cases, this can be presented using two bytes of data. This relatively small amount of data is represented by a thinner arrow 202.

However, in this example, the output device 130 a (e.g., a control module of an air conditioning unit) cannot directly make use of temperature measurements having only a numerical value, and requires an indication of the units of measurement. As shown in FIG. 2B, to account for this, the server computing system 120 can process the sensor data such that it includes the units of measurement (e.g., by appending a unit of measurement to the sensor data). Further, the server computing system 120 can process the sensor data such that it includes representations of measurement in one or more other units of measurement. For example, the server computing system 120 can process the sensor data by converting the temperature measurement to Celsius (e.g., 22° C.) and Fahrenheit (e.g., 72° F.), and include those converted temperature measurements as a part of the processed sensor data. Further, the server can process the sensor data, such that the processed sensor data is in a form compatible with the output devices 130 a-c (e.g., having a particular format or data structure that enables the output devices 130 a-c to interpret the processed sensor data).

In some cases, this processing can increase the size of the sensor data. As an example, the data received from the sensor 110 a may be between one byte to 8 bytes, whereas the processed data may be 16 bytes or greater. This relatively large amount of data is represented by a thicker arrow 204.

As an illustrative example, in some cases, processing temperature data from the sensor can result in the generation of the following Javascript Object Notation (JSON) object:

{ “temperature” : { “kelvin” : { “value” : 295, “unit of measure” : “K” } “fahrenheit” : { “value” : 72, “unit of measure” : “F” }, “celsius” : { “value” : 22, “unit of measure” : “C” } } }

In this example, the processed data is a sting of 321 bytes (including a “degree” symbol and whitespace characters), substantially larger than the 2 bytes of data received from the sensor.

As shown in FIG. 2C, the processed data is transmitted to the output device 130 a (presented by a thicker arrow 206). As an example, the server computing system 120 can transmit the data object generated by the server computing system 120, including each of the converted measurement values and/or units of measurements. In turn, the output device 130 a can utilize the processed data and/or retain the processed data for future use. For instance, in this example, the output device 130 a is a control module of an air conditioning unit, and can either instruct the air conditioning unit to cool the environment, heat the environment, or cease operation depending on the temperature indicated in the processed sensor information.

As the network 140 b has a higher throughput than the network 140 a, the network 140 b is more robust with respect to network latency. Thus, by transmitting smaller portions of data across the lower throughput network 140 a, and transmitting larger processed portions of data across the higher throughput network 140 b, the performance of the overall system is improved.

In the aforementioned example, the server computing system 120 processes data received from the sensor 110 a by appending a unit of measurement to a numerical value. However, this is merely an illustrative example. In practice, the server computing system 120 can process sensor data any number of different ways.

As an example, the server computing system 120 can convert measurements obtained by the sensors 110 a-c into different units of measurement. For instance, if the sensor 110 a outputs temperature measurements in degrees Fahrenheit, the server computing system 120 can convert the measurements to Celsius and/or Kelvin.

As another example, the server computing system 120 can process multiple measurements in conjunction. For instance, if the sensor 110 a outputs temperature measurements, the server computing system 120 can calculate a rate of change in temperature (e.g., by calculating a rate of change in measurements received from the sensor 110 a over a period of time).

As another example, the server computing system 120 can process multiple measurements received from multiple different sensors in conjunction. For instance, if the sensors 110 a-c output temperature measurements from a first, second, and third area of a building respectively, the server computing system 120 can calculate an average temperature for the three areas (e.g., by calculating an average of the measurements received from the sensor 110 a-c).

Other forms of data processing are also possible, depending on the implementation. As examples, data processing can include geometric operates, numerical integration, interpolation, extrapolation, regression, error detection and correction, digital signal processing, image processing, process synchronization, scheduling, sequencing, machine learning, statistical analysis, and predictive analysis.

As described above, performing some or all of the sensor data processing on the server computing system 120 instead of the sensors 110 a-c reduces the computational requirements of the sensors 110 a-c, and can enable sensors to be constructed more simply and/or less expensively. In some cases, this also enables sensors to operate more efficiently, and transmit data more quickly and efficiently to the server computing system 120 (e.g., by reducing network traffic and network latency between the server computing system 120 and the sensors 110 a-c).

In some cases, sensor data provided by a single sensor can be routed to multiple output devices by the server computing system 120, without requiring the sensor to send sensor data to each output device individually. For example, referring to FIG. 3A, a sensor 110 a can transmit a portion of data to the server computing system 120 (represented by arrow 302). As shown in FIG. 2B, the server computing system 120 transmits the sensor data to two different output devices 130 a and 130 c (represented by arrows 304 a and 304 b). In turn, the output devices 130 a and 130 c can utilize the sensor data and/or retain the sensor data for future use.

In a similar manner as described with respect to FIGS. 2A-C, the network 140 b has a higher throughput than the network 140 a. Thus, the network 140 b is more robust with respect to network latency. Accordingly, by transmitting smaller portions of data across the lower throughput network 140 a (e.g., a single instance of sensor data), and transmitting larger portions of data across the higher throughput network 140 b (e.g., multiple instances of the sensor data), the performance of the overall system is improved. Further, as the sensor 110 a only transmits sensor data once, the sensor 110 a can share data to multiple different destinations more quickly and efficiently.

In some cases, sensor data can be both processed and routed to multiple output devices by the server computing system 120. For example, referring to FIG. 4A, a sensor 110 a can transmit a relatively small amount of sensor data to the server computing system 120 (represented by a thinner arrow 402). As shown in FIG. 4B, the server computing system 120 can process the data. In some cases, this processing can increase the size of the sensor data (represented by a thicker arrow 404). As shown in FIG. 4C, the processed sensor data is transmitted to two different output devices 130 a and 130 c (represented by the thicker arrows 406 a and 406 b). In turn, the output devices 130 a and 130 c can utilize the sensor data and/or retain the sensor data for future use.

In some cases, each of the components of the system 100 can be assigned a respective identifier (e.g., an identification number or name) that uniquely identifies that component. These identifiers can be used to define how data is processed and routed by the server computing system 120. For example, the server computing system 120 can assign each of the sensors 110 a-c and the output devices 130 a-c a respective identifier (e.g., an “endpoint ID”). Further, the server computing system 120 can group certain identifiers together, and groups of devices can be collectively specified by a group identifier.

As an example, the sensors 110 a-c can be assigned identifiers “111,” “222,” and “333,” respectively. Further, the output devices 130 a-c can be assigned identifiers “AAA,” “BBB”, and “CCC,” respectively. In this example, each of the sensors 110 a-c provides different sensor information that is to be processed and routed in different ways by the server computing system 120.

To identify itself to the server computing system 120, each of the sensors 110 a-c transmits its respective identifier to the server computing system 120 prior to sending sensor data. The server computing system 120 identifies each of the sensors 110 a-c based on the received identifiers, and processes and routes the sensor data received from each differently based on one or more “configuration areas” associated with the identifiers. Configuration areas can be, for example, logical areas or profiles maintained by the server computing system 120.

As an example, Table 1 shows a first example configuration area. In this configuration area, data received from a sensor having an identifier “111” is associated with a processing operation “A,” and a destination identifier “AAA.” Thus, when the server computing system 120 receives an identifier “111” from one of the sensors, it subsequently processes the sensor data received from that sensor using the processing operation “A,” and transmits the processed data to output device “AAA.”

TABLE 1 First example configuration area. Source Identifier Processing Operation Destination Identifier 111 A AAA

The server computing device 120 can define any number of configuration areas, such that sensor data is processed and routed concurrently from any number of sensors. For example, Table 2 shows a second example configuration area defined in conjunction with the first example configuration area shown in Table 1. In this configuration area, data received from a sensor having an identifier “222” is associated with a processing operation “B,” and a destination identifiers “AAA” and “BBB.” Thus, when the server computing system 120 receives an identifier “222” from one of the sensors, it subsequently processes the sensor data received from that sensor using the processing operation “B,” and transmits the processed data to two output devices “AAA” and “BBB.”

TABLE 2 Second example configuration area. Source Identifier Processing Operation Destination Identifier 222 B AAA, BBB

Thus, the server computing device 120 can receive sensor data from any number of sensors, process sensor data from each sensor in accordance with pre-defined processing operations, and transmit the processed sensor data to corresponding output devices.

In some cases, sources of data and/or destinations for processed data can be grouped into one or more “pools” or “groups.” These pools or groups can be assigned a respective group identifier, and like identifiers for individual components, group identifies can be used to specify how data is processed and routed. For example, Table 3 shows a third example configuration area defined in conjunction with the first example configuration area shown in Table 1. In this configuration area, data received from a source group “YYY” is associated with a processing operation “C,” and a destination group “ZZZ.” The source group “YYY” includes the sensors having identifiers “111” and “222,” while the destination group “ZZZ” includes the output devices having identifiers “BBB” and CCC.” Thus, when the server computing system 120 receives identifiers “111” and “222” from any of the sensors, it determines that they are associated with the group “YYY.” Accordingly, the server computing system 120 processes the sensor data received from those sensor using the processing operation “C,” and transmits the processed data to two output devices “XXX” and “ZZZ.” Thus, multiple source and/or destination devices can be specified collectively as a group, rather an individually.

TABLE 3 Third example configuration area. Source Identifier Processing Operation Destination Identifier YYY C ZZZ [Group including 111 and [Group including YYY and 222] ZZZ]

In some cases, the server computing system 120 can maintain a database of groups and their corresponding source and/or destination devices. In some cases, groups can be defined, modified, and/or deleted by users to customize the organization of devices as desired.

In some cases, configuration areas also can be created, modified, and/or deleted by a user. For example, a user may wish to receive sensor data from sensor 110 b, process it using a particular algorithm “C,” and output the processed data to a single output device 110 c. Thus, the user can create a new configuration area associating the identifier for sensor 110 b (e.g., “222”) with the processing operation “C” and the identifier for output device 110 c (e.g., “CCC”). If the user wishes to output the processed data to a second output device 110 a, he can modify the configuration area, such that the identifier for sensor 110 b is further associated with the identifier for output device 110 a (e.g., “AAA”). If the user wishes to discontinue the processing and routing of sensor data from the sensor 110 b, he can subsequently delete the configuration area. Similarly, the user can create, modify, and/or delete any number of different configuration areas to suit his desired application.

In some cases, the user can create, modify, and/or delete configuration areas and groups using a user interface provided by the system 100. For example, in some implementations, the server computing system 120 can provide a web-based interface (e.g., a website constructed using HTML), and the user can interact with the web-based interface to create, modify, and/or delete configuration areas and groups.

In some cases, the user can be assigned a set of user credentials (e.g., a user name and password) by the server computing system 120, and configuration areas and/or groups can be restricted to specific users on the basis of those user credentials. For example, the server computing system 120 can restrict access of each configuration area and group, such that only certain authorized users (e.g., users presenting a particular set of user credentials) can view, modify, and/or delete each configuration area or group. In some cases, user credentials can be associated with user accounts or profiles, and each user account or profile can be populated with one or more configuration areas and/or groups. This can be beneficial, for example, as it allows multiple users to manage one or more configuration areas or groups in a secure and private manner.

In some cases, data from each sensor can be selectively processed and routed to single corresponding endpoint (e.g., a single output device). This can be useful, for example, as it enables the user to selectively begin data routing for a sensor or restrict the data routing for a sensor, depending on the user's needs and use-case.

In some cases, an output device can be an external data processing system (e.g., a “big data” analytics engine, an external data storage system, or some other external destination that provides data management functionality). This can be useful, for example, as it enables users to selectively direct processed sensor data to one or more data processing systems that further process and/or store the data. In some cases, these external data processing systems can also be identified by a unique identifier (e.g., an “endpoint ID”) similar to those of other output devices. In some cases, the server computing system can be used to process data such that it is suitable for a particular external data processing system (e.g., by processing the data in a customized manner, such that the processed data has a particular format or parameters compatible with the external data processing system).

In some cases, sensor data can be displayed to a user after delivery to a server computing system. For example, a server computing system can provide a web-based interface (e.g., a website constructed using HTML), and the user can interact with the web-based interface to view sensor data received by the server computing system. In some cases, a server computing system can allow a connection directly from an HTML page using, for example the Web Socket protocol over SSL. In some cases, sensor data can be displayed to a single user. In some cases, sensor data can be displayed to more than one user (e.g., using a dynamically generated webpage for each user).

In some cases, each of the users can be assigned a common “pool ID” or “group ID” that enables each of them to access sensor data. In some cases, after presenting a pool ID or group ID to the server computing system, and service computing system can assign each user a temporary identifier (e.g., an “endpoint ID”) that allows the system to differentiate between each of the users of the pool ID or group ID. In some cases, these temporary identifiers can be used to facilitate bi-directional communicate to and from the users. In this manner, although many users can be initially assigned a common identifier, they can be differentiated from one another such that information can be selectively provided to one or all of the users.

In some cases, a sensor can be configured to communicate directly with a relay or server computing system. For example, a sensor can include software, hardware, and/or firmware that enables the sensor to transmit data using a communications protocol and/or data format compatible with the relay or server computing system. In some implementations, a sensor cannot communicatively directly with a relay or server computing system. Instead, the sensor can transmit data to an intermediate system (e.g., an intermediate server computer or embedded system), which interprets the data, and transmits it to relay or server computing system (e.g., using a communications protocol and/or data format compatible with the relay or server computing system).

In some cases, a relay can be used to interconnect multiple different types of networks. In some cases, the relay can collect and store sensor data (e.g., temporarily store sensor data received from a sensor across a first type of network, such that it can be relayed to a server computing system across a different type of network). In some cases, the relay can include software, hardware, and/or firmware that enables the relay to transmit data using a communications protocol and/or data format compatible with the sensors and/or server computing systems.

In the example shown in FIG. 1, each of the sensors 110 a-c communicates directly with the server computing system 120. However, this need not be the case. In some implementations, the one or more sensors 110 a-c can communicate to a server computing system 120 through a relay device (e.g., an intermediary device that receives data transmission from the sensors 110 a-c, and transmits the data transmission to the server computing system 120). A relay 510 can be, for example, a network gateway or network bridge device. In some cases, a relay 510 can be a computing device that is configured to receive data from a source device (e.g., a sensor 110 a-c) and route data to a destination device (e.g., the server computing system 120). In some cases, a relay can include communications modules, such as Wi-Fi modules, cellular modems to communicate with one or more communications networks.

As an example, a system 500 for processing data is shown in FIG. 5. The system 500 includes several sensors 110 a-c, a server computing system 120, and a relay 510. The sensors 110 a-c are communicatively coupled to the relay 510 through a communications network 140 a. The relay 510 is, in turn, communicatively coupled to the server computing system 120 through a communications network 140 c. Communications from the sensors 110 a-c are initially routed to the relay 510, and subsequently routed to the server computing system 120. In a similar manner are described with respect to FIG. 1, the server computing system 120 can be communicatively coupled to one or more output devices (e.g., output devices 130 a-c) through a communications network (e.g., the communications networks 140 b or 140 c).

In some cases, the throughput of network 140 a can be less than the throughput of network 140 c (represented by the thinner arrows interconnecting the network 140 a to the sensors 110 a-c and the relay 510, and by the thicker arrows interconnecting the network 140 c to the relay 510 and the server computing system 120). As an example, the network 140 a can operate according to a relatively low power communications protocol (e.g., a BLE network), and the network 140 c can operate according to a relatively high power communications protocol (e.g., an Ethernet network, such as Gigabit Ethernet network, a Wi-Fi network, a cellular network, etc.). In some cases, the network 140 c can be a LAN or a WAN, such as the Internet. In some cases, the throughput of network 140 a can be 100 kbit/s or less (e.g., less than 8 kbit/s, less than 50 kbit/s, less than 35 kbit/s, less than 20 kbit/s, and so forth). In some cases, the throughput of network 140 c can be 1 Mbit/s or more (e.g., more than 2 Mbit/s, more than 10 Mbit/s, more than 100 Mbit/s, more than 1000 Mbit/s, and so forth).

In some implementations, a relay 510 can be a mobile device, such as a cellular phone, tablet computer, smart phone, or other handheld device. The relay can include a first communications module (e.g., a Bluetooth module) to communicate with the sensors 110 a-c across the network 140 a, and a second communications module (e.g., a Wi-Fi, Ethernet communications module, cellular communications module, etc.) to communicate with the server computing system 120 across the network 140 c.

In some cases, the mobile device can be a general purpose user device, and can be configured to act as a relay (e.g., through the installation of a software application). This can be beneficial, for example, as it enables users to utilize their general purpose mobile devices (which they may otherwise already possess) to route sensor data to a server computing system. Thus, users can make use of sensor data quickly and easily, and at reduced cost.

Although a single relay 510 is shown, this is merely an illustrative example. In practice, there may be any number of relays that route data between sensors and server computing systems. Further, in some cases, relays can also be used to route data between a server computing system and one or more output devices.

In some implementations, to handle more concurrent connections, additional server computing systems and/or relays can be added and networked together, and data routed between each of two server computers and/or relays using a single connection. Different topologies may also be utilized for organization to reduce networking overhead. In an example implementation, the server computing systems and/or relays can be arranged in a star configuration, enabling a single hub server computing system to communicate with numerous other spoke server computers and/or relays. In turn, the spoke server computers and/or relays each can act as an interconnected switch, passing messages from the hub server computing system to one or more sensors. For example, multiple (e.g., 100,000) spoke server computers and/or relays may be used, each of which in turn communicate with a single “hop” (e.g., through a direct or substantially direct network connection) to multiple (e.g., 100,000) data sources (e.g., sensors). This enables massive scalability within a few hops of a central hub with a minimal or otherwise small effect on latency. In an exemplary implementation, as the hop count increases, the star topology may be replaced with a direct-connected mesh configuration to keep the count low.

As an example, FIG. 6 shows a system 600 having a hub server computing system 610, spoke server computing systems 620 a-c, and sensors 630 a-f. The hub server computing system 610 is communicatively coupled to the spoke server computing systems 620 a-c by a single network hop 640 a-c, respectively. Similarly, the spoke server computing system 610 a is communicatively coupled to the sensors 630 a-b a single network hop 640 d-e, respectively, the spoke server computing system 610 b is communicatively coupled to the sensors 630 c-d a single network hop 640 f-g, respectively, and the spoke computing system 610 c is communicatively coupled to the sensors 630 e-f a single network hop 640 h-i, respectively. Data from the sensors 630 a-f can be processed (e.g., as described above) by the hub server computing system 610 and/or by one or more of the spoke server computing systems 620 a-c (e.g., the spoke server computing system 620 a-c within the fewest hops from each sensor 630 a-f). Further, processed sensor data can be transmitted to any other device on the system 600 through one or more hops. Although an example system 600 is shown in FIG. 6, this is merely an illustrative example. In practice, a system can include any number of sensors, spoke computing systems, and hub computing systems in any arrangement.

In some cases, there may be multiple hub server computing systems (e.g., two, three, or more), and a load balancer (e.g., a round robin load balancer) can be used to distribute the connections across two or more of the hub server computing systems). This allows the network to be expanded without substantially increasing the network latency between devices.

In some cases, one or more server computers can utilize a scalable I/O event notification mechanism (e.g., epoll on Linux) to handle a large number of connections (e.g., 100,000 TCP/IP connections or more).

In some cases, a system can include a “mesh” network configuration in which decentralized nodes of the network relay data for the network and corporate in the distribution of data across the network. As an example, FIG. 7 shows a system 700 having spoke server computing systems 710 a-d. The spoke server computing systems 710 a-d are communicatively coupled to one another by single network hops 720 a-e. Each spoke server computing system 710 a-d can be communicatively coupled to one or more sensors, and data from the sensors can be processed (e.g., as described above) by one or more of the spoke server computing systems 710 a-d (e.g., the spoke server computing system 720 a-d within the fewest hops from each sensor). Further, processed sensor data can be transmitted to any other device on the system 700 through one or more hops. Although an example system 700 is shown in FIG. 7, this is merely an illustrative example. In practice, a system can include any number of spoke computing systems and corresponding sensors in any arrangement.

In some cases, the communications from a sensor or relay to a server computing system can be connection-oriented instead of transactional in nature. This can be beneficial, for example, is it reduces the latency of network communications (e.g., as connections do not need to be individually opened and closed for each transmission).

In some cases, some or all of the communications between devices can be implemented using binary messages. This can be beneficial, for example, as it can reduce the data size of the transmissions while reducing processing overhead (e.g., by avoiding the encoding/decoding overhead for processing sensor data).

In some cases, a sensor can “push” data to a relay and/or server computing device, such that the server computing device does not need to poll the sensor periodically for updated sensor data. This can be beneficial, for example, as data can be transmitted more quickly after collection from the sensor (e.g., in real-time or substantially real-time, instead of periodically in response to a polling request).

In some cases, a sensor can push data to a relay (e.g., over a BLE connection), and the relay can push the data to a server computing system. In some cases, the sensor can initially encrypt the sensor data using a first encryption technique prior to transmission to the relay, and the relay can subsequently encrypt the data using a second encryption technique prior to transmission to the server computing system. This can be beneficial, for example, as it enables the sensor to use relatively power-efficient encryption techniques (e.g., AES encryption) to initially encrypt the data, and the relay can subsequently encrypt the data using more power-intensive encryption techniques (e.g., SSL) for transmission to a server computing system. In some cases, this enables the sensor to operate more efficiently (e.g., by consuming less power) as the system routes data using a variety of communications protocols (e.g., TCP/IP and BLE), some of which may require more power-intensive encryption techniques.

Although sensors are described as devices that collect data and provide data (e.g., measurement data) to other devices, in some cases, sensors also can receive data or other signals from other devices. For instance, in some cases, sensors can receive commands (e.g., from a server computing system) instructing the sensor to modify their behavior and/or relay instructions to other devices. As examples, a sensor can receive commands that instruct it to start and stop making measurements, commands that instruct it to calibrate its measurements, commands that instruct it to move or reposition itself in the environment, commands that instruct it to relay commands to other devices (e.g., control modules controlling the operation of one or more electrical and/or mechanical components), and so forth. In some cases, sensors can receive commands to update or otherwise modify software or firmware stored on the sensor.

Data can be transmitted between devices using any suitable data transmission module. For example, one or more sensors, relays, and/or server computing devices can include RF modules. Further, data can be transmitted any suitable data transmission technique.

As described herein, in some implementations, a server computing system can include multiple computing devices, and the functionality of the server computing system can be distributive on one or more of these computing devices. For example, in some cases, a first set of computing devices (e.g., a first server computing system) can enable users to define and manage configuration areas, and a second set of computing devices (e.g., a second server computing system) can process the data according to the configuration areas. In some cases, the first and second set of computing devices can each be maintained by a different entity, such that one entity is responsible for providing user's access to configuration areas, and another entity is responsible to processing data.

As an example, FIG. 8 shows a system 800 for processing sensor data. The system 100 includes several sensors 110 a-c, server computing systems 120 a-b, and several output devices 130 a-c. The sensors 110 a-c are communicatively coupled to the server computing system 120 a through a communications network 140 a. The server computing system 120 a is communicatively coupled to the output devices 130 a-c through a communications network 140 b. The server computing system 120 b is also communicatively coupled to the server computing system 120 a (e.g., through the network 140 b or another communications network between them).

In general, the functionality of the system 800 can be similar to that of the system 100. For example, the sensors 110 a-c can include any device used to detect events occurring in an environment and/or measure properties of an environment, and provide a corresponding output (e.g., an indication of the measured events and/or properties). The server computing systems 120 a-b can include any electronic device that is used process, transmit and receive data from the sensors 110 a-c and the output devices 130 a-c. The output devices 100 a-c can be, or include, any device that makes use of processed data from the server computing systems 120 a-b.

The functionality previously described with respect to the server computing system 120 (e.g., as described with respect to FIGS. 1-5) is provided collectively by the server computing system 120 a-b. For instance, as described above, the server computing system 120 a can enable users to define configuration areas, and the server computing system 120 b can process the data according to the configuration areas.

As an example, the server computing system 120 a can maintain, for each of its users, a set of user credentials (e.g., a user name and password) that allow the user to securely access, define, and/or modify one or more configuration areas and groups (e.g., groups of sensors and/or output devices). When a user provides the server computing system 120 a with his set of user credentials (e.g., by entering the user credentials into a webpage presented by the server computing system 120 a), the server computing system 120 a retrieves each of the previously defined configuration areas and groups, and presents them to the user for review. The server computing system 120 a also enables the users to create additional configuration areas and groups, modifying existing configurations and groups, and/or delete existing configuration areas and groups.

Further, the server computing system 120 a receives sensor data from the sensors 120 a-c. However, instead of processing the received data on the server computing system 120 a, the server computing system 120 a transmits the sensor data to the server computing system 120 b. In response, the server computing system 120 b processes the sensor data, and returns the processed sensor data to the server computing system 120 a. The server computing system 120 a can subsequently transmit the processed data to one or more of the output devices 130 a-c and/or present the processed data to the user for review (e.g., using a dynamically generated webpage). Thus, sensor data is received and processed, either partially or entirely on different server computing systems.

As described above, in some cases, the server computing systems 120 a-b can each be maintained by a different entity, such that one entity is responsible for providing user's access to configuration areas, and another entity is responsible to processing data. In some cases, the server computing system 120 a can be operated by a service provider that provides sensor management services to one or more users (e.g., user operating the sensors 110 a-c and/or the output devices 130 a-c). The users can interact with the server computing system 120 a to organize the collection and processing of sensor data, and provide their own server computing system 120 b for the actual processing of data. This can be useful, for example, as it enables users to define how their sensor data should be processed quickly and efficiently (e.g., using standardized functionality provided by a service provider), while segregating some or all of the actual data processing to their own server computing system 120 b. Thus, the users can process data more securely (e.g., without revealing the exact data processing steps to the server computing system 120 a) and/or without any limitations that might otherwise be imposed by the service provider. This can also be useful, for example, as it enables the service provider to off-load data processing (which may be computationally expensive to perform) to others.

Although two server computing systems 120 a-b are shown in FIG. 8, this is merely an illustrative example. In practice, there may be any number of server computing systems (e.g., one, two, three, four, or more). As an example, in some cases, a system can include a first server computing system that enables user to securely access, define, and/or modify one or more configuration areas and groups (e.g., in a similar manner as the server computing system 120 a). Further, a system can include, for each user or group of users, a separate server computing system to process data (e.g., in a similar manner as the server computing system 120 b). Users can specify, to the first server computing system, which of the separate server computing systems to process sensor data. Subsequently, when the first server computing system receives sensor data associated with a user, it determines which of the separate server computing systems is to process the data, and transmits the received sensor data to the specified server computing system. In this manner, each user has a high degree of control over the processing of sensor data.

In some cases, the relationship between the user, the sensors, the processing operations, the server computing system responsible for performing the processing operations, and/or the output devices can be defined by a configuration area. As an example, in some cases, the user can create a configuration area specifying that sensor data from particular sensors be transmitted to a particular server computing system, and that the specified server computing system perform a particular processing operation on the sensor data. The user can further define that the processed data be transmitted to a particular output device. In this manner, the user has a control over each aspect of the data processing.

In some cases, the server computing system 120 a can retain copies of some or all of the sensor data received from the sensors 110 a-c and/or the processed sensor data received from the server computing system 120 b. This can be useful, for example, as it enables further data analysis (e.g., historical analysis). In some cases, data can be recorded as it is received, then analyzed either in real-time or substantially real-time, or intermittently (e.g., in periodic “batches”). In some case, analysis can be performed by the server computing system 120 a itself, or by another server computing system. As noted above, in some cases, the server computing system 120 can be operated by a service provider, and the server provider can provide data storage and/or data analysis services to its users.

In some cases, the server computing systems 120 a-b can be located in substantially the same location (e.g., in the same room or facility). This can be useful, for example, as it can reduce the network latency between them (e.g., to 1 ms or less). However, in some cases, the server computing systems 120 a-b can be located remote from one another.

Some implementations of subject matter and operations described in this specification can be implemented in digital electronic circuitry, or in computer software, firmware, or hardware, including the structures disclosed in this specification and their structural equivalents, or in combinations of one or more of them. For example, in some implementations, sensors, server computing systems, relays, and output devices can be implemented using digital electronic circuitry, or in computer software, firmware, or hardware, or in combinations of one or more of them.

Some implementations described in this specification can be implemented as one or more groups or modules of digital electronic circuitry, computer software, firmware, or hardware, or in combinations of one or more of them. Although different modules can be used, each module need not be distinct, and multiple modules can be implemented on the same digital electronic circuitry, computer software, firmware, or hardware, or combination thereof.

Some implementations described in this specification can be implemented as one or more computer programs, i.e., one or more modules of computer program instructions, encoded on computer storage medium for execution by, or to control the operation of, data processing apparatus. A computer storage medium can be, or can be included in, a computer-readable storage device, a computer-readable storage substrate, a random or serial access memory array or device, or a combination of one or more of them. Moreover, while a computer storage medium is not a propagated signal, a computer storage medium can be a source or destination of computer program instructions encoded in an artificially generated propagated signal. The computer storage medium can also be, or be included in, one or more separate physical components or media (e.g., multiple CDs, disks, or other storage devices).

The term “data processing apparatus” encompasses all kinds of apparatus, devices, and machines for processing data, including by way of example a programmable processor, a computer, a system on a chip, or multiple ones, or combinations, of the foregoing. The apparatus can include special purpose logic circuitry, e.g., an FPGA (field programmable gate array) or an ASIC (application specific integrated circuit). The apparatus can also include, in addition to hardware, code that creates an execution environment for the computer program in question, e.g., code that constitutes processor firmware, a protocol stack, a database management system, an operating system, a cross-platform runtime environment, a virtual machine, or a combination of one or more of them. The apparatus and execution environment can realize various different computing model infrastructures, such as web services, distributed computing and grid computing infrastructures.

A computer program (also known as a program, software, software application, script, or code) can be written in any form of programming language, including compiled or interpreted languages, declarative or procedural languages. A computer program may, but need not, correspond to a file in a file system. A program can be stored in a portion of a file that holds other programs or data (e.g., one or more scripts stored in a markup language document), in a single file dedicated to the program in question, or in multiple coordinated files (e.g., files that store one or more modules, sub programs, or portions of code). A computer program can be deployed to be executed on one computer or on multiple computers that are located at one site or distributed across multiple sites and interconnected by a communication network.

Some of the processes and logic flows described in this specification can be performed by one or more programmable processors executing one or more computer programs to perform actions by operating on input data and generating output. The processes and logic flows can also be performed by, and apparatus can also be implemented as, special purpose logic circuitry, e.g., an FPGA (field programmable gate array) or an ASIC (application specific integrated circuit).

Processors suitable for the execution of a computer program include, by way of example, both general and special purpose microprocessors, and processors of any kind of digital computer. Generally, a processor will receive instructions and data from a read only memory or a random access memory or both. A computer includes a processor for performing actions in accordance with instructions and one or more memory devices for storing instructions and data. A computer may also include, or be operatively coupled to receive data from or transfer data to, or both, one or more mass storage devices for storing data, e.g., magnetic, magneto optical disks, or optical disks. However, a computer need not have such devices. Devices suitable for storing computer program instructions and data include all forms of non-volatile memory, media and memory devices, including by way of example semiconductor memory devices (e.g., EPROM, EEPROM, flash memory devices, and others), magnetic disks (e.g., internal hard disks, removable disks, and others), magneto optical disks, and CD ROM and DVD-ROM disks. The processor and the memory can be supplemented by, or incorporated in, special purpose logic circuitry.

To provide for interaction with a user, operations can be implemented on a computer having a display device (e.g., a monitor, or another type of display device) for displaying information to the user and a keyboard and a pointing device (e.g., a mouse, a trackball, a tablet, a touch sensitive screen, or another type of pointing device) by which the user can provide input to the computer. Other kinds of devices can be used to provide for interaction with a user as well; for example, feedback provided to the user can be any form of sensory feedback, e.g., visual feedback, auditory feedback, or tactile feedback; and input from the user can be received in any form, including acoustic, speech, or tactile input. In addition, a computer can interact with a user by sending documents to and receiving documents from a device that is used by the user; for example, by sending web pages to a web browser on a user's client device in response to requests received from the web browser.

A computer system may include a single computing device, or multiple computers that operate in proximity or generally remote from each other and typically interact through a communication network. Examples of communication networks include a local area network (“LAN”) and a wide area network (“WAN”), an inter-network (e.g., the Internet), a network comprising a satellite link, and peer-to-peer networks (e.g., ad hoc peer-to-peer networks). A relationship of client and server may arise by virtue of computer programs running on the respective computers and having a client-server relationship to each other.

FIG. 9 shows an example computer system 900 that includes a processor 910, a memory 920, a storage device 930 and an input/output device 940. Each of the components 910, 920, 930 and 940 can be interconnected, for example, by a system bus 950. The processor 910 is capable of processing instructions for execution within the system 900. In some implementations, the processor 910 is a single-threaded processor, a multi-threaded processor, or another type of processor. The processor 910 is capable of processing instructions stored in the memory 920 or on the storage device 930. The memory 920 and the storage device 930 can store information within the system 900.

The input/output device 940 provides input/output operations for the system 900. In some implementations, the input/output device 940 can include one or more of a network interface devices, e.g., an Ethernet card, a serial communication device, e.g., an RS-232 port, and/or a wireless interface device, e.g., an 802.11 card, a 3G wireless modem, a 4G wireless modem, etc. In some implementations, the input/output device can include driver devices configured to receive input data and send output data to other input/output devices, e.g., keyboard, printer and display devices 960. In some implementations, mobile computing devices, mobile communication devices, and other devices can be used.

While this specification contains many details, these should not be construed as limitations on the scope of what may be claimed, but rather as descriptions of features specific to particular examples. Certain features that are described in this specification in the context of separate implementations can also be combined. Conversely, various features that are described in the context of a single implementation can also be implemented in multiple embodiments separately or in any suitable sub-combination.

A number of implementations have been described. Nevertheless, it will be understood that various modifications may be made without departing from the spirit and scope of the disclosure. Accordingly, other implementations are within the scope of the following claims. 

What is claimed is:
 1. A method comprising: receiving, at a computer system from a sensor, sensor data; processing, by the computer system, the sensor data, wherein the processed sensor data is larger in size than the sensor data; and transmitting, from the computer system to a first output device, the processed sensor data, wherein the sensor data is received at the computer system from the sensor over a first communications link, wherein the processed sensor data is transmitted from the computer system to the first output device over a second communications link, and wherein the first communications link has a lower throughput than the second communications link.
 2. The method of claim 1, wherein the first communications link is a Bluetooth connection, and wherein the second communications link comprises one or more of: an Ethernet connection, a Wi-Fi connection, or a Wide Area Network connection.
 3. The method of claim 2, further comprising: maintaining the first communications link and the second communications link over a period of time.
 4. The method of claim 1, wherein the sensor data comprises a numerical value corresponding to a measurement obtained by the sensor, and wherein processing the sensor data comprises appending a unit of measurement to the numerical value.
 5. The method of claim 1, wherein the sensor data comprises a numerical value corresponding to a measurement obtained by the sensor, wherein the numerical value corresponds to a first unit of measurement, and wherein processing the sensor data comprises converting the numerical value into a second numerical value associated with a second unit of measurement.
 6. The method of claim 1, wherein the sensor data comprises a numerical value corresponding to a measurement obtained by the sensor, and wherein processing the sensor data comprises performing one or more mathematical operations with respect to the numerical value.
 7. The method of claim 1, wherein the sensor data is received at the computer system via an intermediate relay device.
 8. The method of claim 7, wherein the intermediate relay device comprises a mobile device communicatively coupled to the sensor and the computer system.
 9. The method of claim 1, further comprising: receiving, at the computer system from the sensor, an identifier associated with the sensor, wherein the computer system receives the identifier prior to receiving the sensor data, wherein the sensor data is processed in a manner based at least in part on the received identifier, wherein processing the sensor data comprises performing one or more operations with respect to the numerical value, and wherein the one or more operations are selected based on the received identifier.
 10. The method of claim 9, wherein the first output device is selected based on the received identifier.
 11. The method of claim 1, further comprising: defining, by the computer system, a logical configuration area, the logical configuration area specifying a relationship between at least the sensor, the processing of the sensor data, and the first output device.
 12. The method of claim 11, further comprising: modifying the logical configuration area based on user input.
 13. The method of claim 11, further comprising: defining, by the computer system, a second logical configuration area, the second logical configuration area specifying a relationship between at least one or more additional sensors, a processing of additional sensor data received by the computer system from the one or more additional sensors, and one or more additional output devices.
 14. The method of claim 11, wherein the computer system comprises: one or more first server computers; and one or more second server computers, wherein the local configuration area is defined by the one or more first server computers, wherein the sensor data is received from the sensor at the one or more first server computers, and wherein processing the sensor data comprises: transmitting the sensor data from the one or more first server computers to the one or more second computers; processing, by the one or more second server computers, the sensor data; and transmitting, from the one or more second server computers to the one or more first server computers, the processed sensor data.
 15. The method of claim 14, wherein the logical configuration area further specifies a relationship between at least the sensor, the processing of the sensor data, the one or more second server computers, and the first output device.
 16. The method of claim 1, further comprising: transmitting, from the computer system to a second output device, the processed sensor data.
 17. The method of claim 1, wherein the output device is configured to control an electrical or mechanical device based on the processed sensor data.
 18. The method of claim 1, wherein the sensor data is received at a computer system from the sensor via a push communication.
 19. A method comprising: receiving, at a computer system from a sensor, sensor data; transmitting, from the computer system to a first output device, the sensor data; and transmitting, from the computer system to a second output device, the sensor data, wherein the sensor data is transmitted from the computer system to the first output device over a second communications link, wherein the sensor data is transmitted from the computer system to the second output device over a third communications link, and wherein the first communications link has a lower throughput than the second communications link and the third communications link.
 20. The method of claim 19, wherein the first communications link is a Bluetooth connection, and wherein each of the second communications link and the third communications link comprises one or more of: an Ethernet connection, a Wi-Fi connection, or a Wide Area Network connection.
 21. The method of claim 19, further comprising: receiving, at the computer system from the sensor, an identifier associated with the sensor, wherein the first output device and the two output device are selected based on the received identifier.
 22. The method of claim 19, further comprising: defining, by the computer system, a logical configuration area, the logical configuration area specifying a relationship between at least the sensor, the first output device, and the second output device.
 23. The method of claim 22, further comprising: modifying the logical configuration area based on user input.
 24. The method of claim 19, further comprising: defining, by the computer system, a second logical configuration area, the second logical configuration area specifying a relationship between at least one or more additional sensors and one or more additional output devices.
 25. The method of claim 19, wherein at least one of the first output device and the second output device is configured to control an electrical or mechanical device based on the processed sensor data.
 26. A system comprising: one or more processors; one or more non-transitory computer-readable media including one or more sequences of instructions which, when executed by the one or more processors, causes the one or more processors to: process, by a computer system, sensor data, wherein the sensor data is received at the computer system from a sensor, and wherein the processed sensor data is larger in size than the sensor data; and transmit, from the computer system to a first output device, the processed sensor data, wherein the sensor data is received at the computer system from the sensor over a first communications link, wherein the processed sensor data is transmitted from the computer system to the first output device over a second communications link, and wherein the first communications link has a lower throughput than the second communications link.
 27. The system of claim 26, wherein the first communications link is a Bluetooth connection, and wherein the second communications link comprises one or more of: an Ethernet connection, a Wi-Fi connection, or a Wide Area Network connection.
 28. The system of claim 27, wherein the first communications link and the second communications link are maintained over a period of time.
 29. The system of claim 26, wherein the sensor data comprises a numerical value corresponding to a measurement obtained by the sensor, and wherein processing the sensor data comprises appending a unit of measurement to the numerical value.
 30. The system of claim 26, wherein the sensor data comprises a numerical value corresponding to a measurement obtained by the sensor, wherein the numerical value corresponds to a first unit of measurement, and wherein processing the sensor data comprises converting the numerical value into a second numerical value associated with a second unit of measurement.
 31. The system of claim 26, wherein the sensor data comprises a numerical value corresponding to a measurement obtained by the sensor, and wherein processing the sensor data comprises performing one or more mathematical operations with respect to the numerical value.
 32. The system of claim 26, wherein the sensor data is received at the computer system via an intermediate relay device.
 33. The system of claim 32, wherein the intermediate relay device comprises a mobile device communicatively coupled to the sensor and the computer system.
 34. The system of claim 26, wherein the computer system is configured to receive, from the sensor, an identifier associated with the sensor, wherein the computer system receives the identifier prior to receiving the sensor data, wherein the sensor data is processed in a manner based at least in part on the received identifier, wherein processing the sensor data comprises performing one or more operations with respect to the numerical value, and wherein the one or more operations are selected based on the received identifier.
 35. The system of claim 34, wherein the first output device is selected based on the received identifier.
 36. The system of claim 26, wherein the one or more sequences of instructions, when executed by the one or more processors, further cause the one or more processors to: define, by the computer system, a logical configuration area, the logical configuration area specifying a relationship between at least the sensor, the processing of the sensor data, and the first output device.
 37. The system of claim 36, wherein the one or more sequences of instructions, when executed by the one or more processors, further cause the one or more processors to: modify the logical configuration area based on user input.
 38. The system of claim 36, wherein the one or more sequences of instructions, when executed by the one or more processors, further cause the one or more processors to: define, by the computer system, a second logical configuration area, the second logical configuration area specifying a relationship between at least one or more additional sensors, a processing of additional sensor data received by the computer system from the one or more additional sensors, and one or more additional output devices.
 39. The system of claim 36, wherein the computer system comprises: one or more first server computers; and one or more second server computers, wherein the one or more first server computers is configured to defined the local configuration area, wherein the one or more first server computers are configured to receive the sensor data from the sensor, and wherein processing the sensor data comprises: transmitting the sensor data from the one or more first server computers to the one or more second computers; processing, by the one or more second server computers, the sensor data; and transmitting, from the one or more second server computers to the one or more first server computers, the processed sensor data.
 40. The system of claim 39, wherein the logical configuration area further specifies a relationship between at least the sensor, the processing of the sensor data, the one or more second server computers, and the first output device.
 41. The system of claim 26, wherein the one or more sequences of instructions, when executed by the one or more processors, further cause the one or more processors to: transmit, from the computer system to a second output device, the processed sensor data.
 42. The system of claim 26, wherein the output device is configured to control an electrical or mechanical device based on the processed sensor data.
 43. The system of claim 26, wherein the sensor data is received at a computer system from the sensor via a push communication.
 44. A system comprising: one or more processors; a non-transitory computer-readable medium including one or more sequences of instructions which, when executed by the one or more processors, causes the one or more processors to: transmitting, from a computer system to a first output device, sensor data, wherein the sensor data is received at the computer system from a sensor; and transmitting, from the computer system to a second output device, the sensor data, wherein the sensor data is transmitted from the computer system to the first output device over a second communications link, wherein the sensor data is transmitted from the computer system to the second output device over a third communications link, and wherein the first communications link has a lower throughput than the second communications link and the third communications link.
 45. The system of claim 44, wherein the first communications link is a Bluetooth connection, and wherein each of the second communications link and the third communications link comprises one or more of: an Ethernet connection, a Wi-Fi connection, or a Wide Area Network connection.
 46. The system of claim 44, wherein the computer system is configured to receive, from the sensor, an identifier associated with the sensor, wherein the first output device and the two output device are selected based on the received identifier.
 47. The system of claim 44, wherein the one or more sequences of instructions, when executed by the one or more processors, further cause the one or more processors to: define, by the computer system, a logical configuration area, the logical configuration area specifying a relationship between at least the sensor, the first output device, and the second output device.
 48. The system of claim 47, wherein the one or more sequences of instructions, when executed by the one or more processors, further cause the one or more processors to: modify the logical configuration area based on user input.
 49. The system of claim 44, wherein the one or more sequences of instructions, when executed by the one or more processors, further cause the one or more processors to: define, by the computer system, a second logical configuration area, the second logical configuration area specifying a relationship between at least one or more additional sensors and one or more additional output devices.
 50. The system of claim 44, wherein at least one of the first output device and the second output device is configured to control an electrical or mechanical device based on the processed sensor data. 